﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace BattleCity
{
    public delegate void DelegadoFlota();
    class Flota
    {
        public List<TanquePC> tanques { get; private set; }

        private int tanquesVivos;
        public event DelegadoFlota FlotaDestruida;


        private Flota()
        {
            tanques = new List<TanquePC>();
            tanquesVivos = 0;
        }
        private static Flota flota = null;
        public static Flota getFlota()
        {
            if (flota == null)
            {
                flota = new Flota();
            }
            return flota;
        }
        public static void Reset()
        {
            flota = null;
        }

        //Cuando deseamos que un tanque que no fue cargado en la flota sea contado como un tanque vivo
        public void ReportarTanque(TanquePC tanque)
        {
            tanquesVivos++;
            tanque.TanqueDestruido += new DelegadoTanque(MarcarBaja);
        }

        public void Add(TanquePC tanque)
        {
            tanquesVivos++;
            tanque.TanqueDestruido += new DelegadoTanque(MarcarBaja);
            tanques.Add(tanque);
        }
        public TanquePC Get()
        {
            if (tanques.Count > 0)
            {
                TanquePC ultimo = tanques.Last();
                tanques.Remove(ultimo);
                return ultimo;
            }
            return null;
        }

        private void MarcarBaja()
        {
            tanquesVivos--;
            if (tanquesVivos == 0)
            {
                FlotaDestruida();
            }
        }
    }
}
